//#pragma comment(linker,"/STACK:16777216") /*16Mb*/
//#pragma comment(linker,"/STACK:33554432") /*32Mb*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<numeric>
#include<sstream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<memory>
#include<string>
#include<vector>
#include<cctype>
#include<list>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

typedef unsigned long long      ui64;
typedef long long               i64;
typedef	vector<int>             VI;
typedef	vector<bool>            VB;
typedef	vector<VI>              VVI;
typedef	vector<string>          VS;
typedef	pair<int,int>           PII;
typedef map<string,int>         MSI;
typedef set<int>                SI;
typedef set<string>             SS;
typedef map<int,int>            MII;
typedef	pair<double,double>     PDD;

#define PB                      push_back
#define MP                      make_pair
#define X                       first
#define Y                       second
#define FOR(i, a, b)            for(int i = (a); i < (b); ++i)
#define RFOR(i, a, b)           for(int i = (a) - 1; i >= (b); --i)
#define CLEAR(a, b)             memset(a, b, sizeof(a))
#define SZ(a)                   int((a).size())
#define ALL(a)                  (a).begin(), (a).end()
#define RALL(a)                 (a).rbegin(), (a).rend()
#define INF                     (2000000000)

int val(char a) {
	return a=='1' ? -1 : 1;
}

int main()
{
	int n; cin >> n;
	string s1,s2;
	cin >> s1 >> s2;
	
	VVI dp(n+1,VI(n+1,3));
	VVI from(n+1,VI(n+1,0));
	FOR(i,0,n+1) {
		FOR(j,0,n+1) {
			/**/
			if( i==0 ) {
				dp[i][j] = j==0 ? 0 : dp[i][j-1] + val(s2[j-1]);
				from[i][j] = 2;
				if( abs(dp[i][j]) > 1 )
					dp[i][j] = 3,from[i][j] = 0;
				continue;
			}
			if( j==0 ) {
				dp[i][j] = dp[i-1][j] + val(s1[i-1]);
				from[i][j] = 1;
				if( abs(dp[i][j]) > 1 )
					dp[i][j] = 3,from[i][j] = 0;
				continue;
			}
			if( abs(dp[i][j-1])<2 && abs( dp[i][j-1] + val(s2[j-1]) ) < 2 ) {
				dp[i][j] = dp[i][j-1] + val(s2[j-1]);
				from[i][j] = 2;
				continue;
			}
			if( abs(dp[i-1][j])<2 && abs( dp[i-1][j] + val(s1[i-1]) ) < 2 ) {
				dp[i][j] = dp[i-1][j] + val(s1[i-1]);
				from[i][j] = 1;
				continue;
			}
		}
	}

	int x = n, y = n;
	string res = "";
	if( !from[n][n] )
		x = y = 0;
	while( x || y ) {
		if( from[x][y] == 1 )
			res.PB( '1' ),x--;
		else
			res.PB( '2' ),y--;
	}
	reverse(ALL(res));
	string wrong = "Impossible\n";
	if( SZ(res)!=n*2 )
		cout << wrong;
	else
		cout << res << endl;
    return 0;
}